/*
 * Copyright(c) 2019 Free Software Foundation, Inc.
 *
 * This file is part of libtasn1.
 *
 * Libtasn1 is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Libtasn1 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with libtasn1.  If not, see <https://www.gnu.org/licenses/>.
 *
 * This fuzzer is testing arbitrary DER input data with GnuTLS's ASN.1 definition (lib/pkix.asn).
 * So, any issues found here likely have a real world impact on every software using libgnutls.
 */

#include <config.h>

#include <assert.h>		// assert
#include <stdlib.h>		// malloc, free
#include <string.h>		// strcmp, memcpy

#include "libtasn1.h"
#include "fuzzer.h"

/*
 * This is the ASN.1 definition array used by GnuTLS.
 * It is created from lib/pkix.asn over at the GnuTLS project.
 */
static const asn1_static_node pkix_asn1_tab[] = {
  {"PKIX1", 536875024, NULL},
  {NULL, 1073741836, NULL},
  {"PrivateKeyUsagePeriod", 1610612741, NULL},
  {"notBefore", 1610637349, NULL},
  {NULL, 4104, "0"},
  {"notAfter", 536895525, NULL},
  {NULL, 4104, "1"},
  {"AuthorityKeyIdentifier", 1610612741, NULL},
  {"keyIdentifier", 1610637319, NULL},
  {NULL, 4104, "0"},
  {"authorityCertIssuer", 1610637314, "GeneralNames"},
  {NULL, 4104, "1"},
  {"authorityCertSerialNumber", 536895490, "CertificateSerialNumber"},
  {NULL, 4104, "2"},
  {"SubjectKeyIdentifier", 1073741831, NULL},
  {"KeyUsage", 1073741830, NULL},
  {"DirectoryString", 1610612754, NULL},
  {"teletexString", 1612709918, NULL},
  {"MAX", 524298, "1"},
  {"printableString", 1612709919, NULL},
  {"MAX", 524298, "1"},
  {"universalString", 1612709920, NULL},
  {"MAX", 524298, "1"},
  {"utf8String", 1612709922, NULL},
  {"MAX", 524298, "1"},
  {"bmpString", 1612709921, NULL},
  {"MAX", 524298, "1"},
  {"ia5String", 538968093, NULL},
  {"MAX", 524298, "1"},
  {"SubjectAltName", 1073741826, "GeneralNames"},
  {"GeneralNames", 1612709899, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "GeneralName"},
  {"GeneralName", 1610612754, NULL},
  {"otherName", 1610620930, "AnotherName"},
  {NULL, 4104, "0"},
  {"rfc822Name", 1610620957, NULL},
  {NULL, 4104, "1"},
  {"dNSName", 1610620957, NULL},
  {NULL, 4104, "2"},
  {"x400Address", 1610620941, NULL},
  {NULL, 4104, "3"},
  {"directoryName", 1610620939, NULL},
  {NULL, 1073743880, "4"},
  {NULL, 2, "RelativeDistinguishedName"},
  {"ediPartyName", 1610620941, NULL},
  {NULL, 4104, "5"},
  {"uniformResourceIdentifier", 1610620957, NULL},
  {NULL, 4104, "6"},
  {"iPAddress", 1610620935, NULL},
  {NULL, 4104, "7"},
  {"registeredID", 536879116, NULL},
  {NULL, 4104, "8"},
  {"AnotherName", 1610612741, NULL},
  {"type-id", 1073741836, NULL},
  {"value", 541073421, NULL},
  {NULL, 1073743880, "0"},
  {"type-id", 1, NULL},
  {"IssuerAltName", 1073741826, "GeneralNames"},
  {"BasicConstraints", 1610612741, NULL},
  {"cA", 1610645508, NULL},
  {NULL, 131081, NULL},
  {"pathLenConstraint", 537411587, NULL},
  {"0", 10, "MAX"},
  {"CRLDistributionPoints", 1612709899, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "DistributionPoint"},
  {"DistributionPoint", 1610612741, NULL},
  {"distributionPoint", 1610637314, "DistributionPointName"},
  {NULL, 2056, "0"},
  {"reasons", 1610637314, "ReasonFlags"},
  {NULL, 4104, "1"},
  {"cRLIssuer", 536895490, "GeneralNames"},
  {NULL, 4104, "2"},
  {"DistributionPointName", 1610612754, NULL},
  {"fullName", 1610620930, "GeneralNames"},
  {NULL, 4104, "0"},
  {"nameRelativeToCRLIssuer", 536879106, "RelativeDistinguishedName"},
  {NULL, 4104, "1"},
  {"ReasonFlags", 1073741830, NULL},
  {"ExtKeyUsageSyntax", 1612709899, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 12, NULL},
  {"AuthorityInfoAccessSyntax", 1612709899, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "AccessDescription"},
  {"AccessDescription", 1610612741, NULL},
  {"accessMethod", 1073741836, NULL},
  {"accessLocation", 2, "GeneralName"},
  {"Attribute", 1610612741, NULL},
  {"type", 1073741836, NULL},
  {"values", 536870927, NULL},
  {NULL, 13, NULL},
  {"AttributeTypeAndValue", 1610612741, NULL},
  {"type", 1073741836, NULL},
  {"value", 13, NULL},
  {"Name", 1610612754, NULL},
  {"rdnSequence", 536870923, NULL},
  {NULL, 2, "RelativeDistinguishedName"},
  {"DistinguishedName", 1610612747, NULL},
  {NULL, 2, "RelativeDistinguishedName"},
  {"RelativeDistinguishedName", 1612709903, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "AttributeTypeAndValue"},
  {"Certificate", 1610612741, NULL},
  {"tbsCertificate", 1073741826, "TBSCertificate"},
  {"signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"signature", 6, NULL},
  {"TBSCertificate", 1610612741, NULL},
  {"version", 1610653699, NULL},
  {NULL, 1073741833, "0"},
  {NULL, 2056, "0"},
  {"serialNumber", 1073741826, "CertificateSerialNumber"},
  {"signature", 1073741826, "AlgorithmIdentifier"},
  {"issuer", 1073741826, "Name"},
  {"validity", 1073741826, "Validity"},
  {"subject", 1073741826, "Name"},
  {"subjectPublicKeyInfo", 1073741826, "SubjectPublicKeyInfo"},
  {"issuerUniqueID", 1610637314, "UniqueIdentifier"},
  {NULL, 4104, "1"},
  {"subjectUniqueID", 1610637314, "UniqueIdentifier"},
  {NULL, 4104, "2"},
  {"extensions", 536895490, "Extensions"},
  {NULL, 2056, "3"},
  {"CertificateSerialNumber", 1073741827, NULL},
  {"Validity", 1610612741, NULL},
  {"notBefore", 1073741826, "Time"},
  {"notAfter", 2, "Time"},
  {"Time", 1610612754, NULL},
  {"utcTime", 1073741860, NULL},
  {"generalTime", 37, NULL},
  {"UniqueIdentifier", 1073741830, NULL},
  {"SubjectPublicKeyInfo", 1610612741, NULL},
  {"algorithm", 1073741826, "AlgorithmIdentifier"},
  {"subjectPublicKey", 6, NULL},
  {"Extensions", 1612709899, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "Extension"},
  {"Extension", 1610612741, NULL},
  {"extnID", 1073741836, NULL},
  {"critical", 1610645508, NULL},
  {NULL, 131081, NULL},
  {"extnValue", 7, NULL},
  {"CertificateList", 1610612741, NULL},
  {"tbsCertList", 1073741826, "TBSCertList"},
  {"signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"signature", 6, NULL},
  {"TBSCertList", 1610612741, NULL},
  {"version", 1073758211, NULL},
  {"signature", 1073741826, "AlgorithmIdentifier"},
  {"issuer", 1073741826, "Name"},
  {"thisUpdate", 1073741826, "Time"},
  {"nextUpdate", 1073758210, "Time"},
  {"revokedCertificates", 1610629131, NULL},
  {NULL, 536870917, NULL},
  {"userCertificate", 1073741826, "CertificateSerialNumber"},
  {"revocationDate", 1073741826, "Time"},
  {"crlEntryExtensions", 16386, "Extensions"},
  {"crlExtensions", 536895490, "Extensions"},
  {NULL, 2056, "0"},
  {"AlgorithmIdentifier", 1610612741, NULL},
  {"algorithm", 1073741836, NULL},
  {"parameters", 541081613, NULL},
  {"algorithm", 1, NULL},
  {"Dss-Sig-Value", 1610612741, NULL},
  {"r", 1073741827, NULL},
  {"s", 3, NULL},
  {"Dss-Parms", 1610612741, NULL},
  {"p", 1073741827, NULL},
  {"q", 1073741827, NULL},
  {"g", 3, NULL},
  {"pkcs-7-ContentInfo", 1610612741, NULL},
  {"contentType", 1073741836, NULL},
  {"content", 541073421, NULL},
  {NULL, 1073743880, "0"},
  {"contentType", 1, NULL},
  {"pkcs-7-DigestInfo", 1610612741, NULL},
  {"digestAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"digest", 7, NULL},
  {"pkcs-7-SignedData", 1610612741, NULL},
  {"version", 1073741827, NULL},
  {"digestAlgorithms", 1073741826, "pkcs-7-DigestAlgorithmIdentifiers"},
  {"encapContentInfo", 1073741826, "pkcs-7-EncapsulatedContentInfo"},
  {"certificates", 1610637314, "pkcs-7-CertificateSet"},
  {NULL, 4104, "0"},
  {"crls", 1610637314, "pkcs-7-CertificateRevocationLists"},
  {NULL, 4104, "1"},
  {"signerInfos", 2, "pkcs-7-SignerInfos"},
  {"pkcs-7-DigestAlgorithmIdentifiers", 1610612751, NULL},
  {NULL, 2, "AlgorithmIdentifier"},
  {"pkcs-7-EncapsulatedContentInfo", 1610612741, NULL},
  {"eContentType", 1073741836, NULL},
  {"eContent", 536895501, NULL},
  {NULL, 2056, "0"},
  {"pkcs-7-CertificateRevocationLists", 1610612751, NULL},
  {NULL, 13, NULL},
  {"pkcs-7-CertificateChoices", 1610612754, NULL},
  {"certificate", 13, NULL},
  {"pkcs-7-CertificateSet", 1610612751, NULL},
  {NULL, 2, "pkcs-7-CertificateChoices"},
  {"IssuerAndSerialNumber", 1610612741, NULL},
  {"issuer", 1073741826, "Name"},
  {"serialNumber", 2, "CertificateSerialNumber"},
  {"pkcs-7-SignerInfo", 1610612741, NULL},
  {"version", 1073741827, NULL},
  {"sid", 1073741826, "SignerIdentifier"},
  {"digestAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"signedAttrs", 1610637314, "SignedAttributes"},
  {NULL, 4104, "0"},
  {"signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"signature", 1073741831, NULL},
  {"unsignedAttrs", 536895490, "SignedAttributes"},
  {NULL, 4104, "1"},
  {"SignedAttributes", 1612709903, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "Attribute"},
  {"SignerIdentifier", 1610612754, NULL},
  {"issuerAndSerialNumber", 1073741826, "IssuerAndSerialNumber"},
  {"subjectKeyIdentifier", 536879111, NULL},
  {NULL, 4104, "0"},
  {"pkcs-7-SignerInfos", 1610612751, NULL},
  {NULL, 2, "pkcs-7-SignerInfo"},
  {"pkcs-10-CertificationRequestInfo", 1610612741, NULL},
  {"version", 1073741827, NULL},
  {"subject", 1073741826, "Name"},
  {"subjectPKInfo", 1073741826, "SubjectPublicKeyInfo"},
  {"attributes", 536879106, "Attributes"},
  {NULL, 4104, "0"},
  {"Attributes", 1610612751, NULL},
  {NULL, 2, "Attribute"},
  {"pkcs-10-CertificationRequest", 1610612741, NULL},
  {"certificationRequestInfo", 1073741826,
   "pkcs-10-CertificationRequestInfo"},
  {"signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"signature", 6, NULL},
  {"pkcs-9-at-challengePassword", 1879048204, NULL},
  {"iso", 1073741825, "1"},
  {"member-body", 1073741825, "2"},
  {"us", 1073741825, "840"},
  {"rsadsi", 1073741825, "113549"},
  {"pkcs", 1073741825, "1"},
  {NULL, 1073741825, "9"},
  {NULL, 1, "7"},
  {"pkcs-9-challengePassword", 1610612754, NULL},
  {"printableString", 1073741855, NULL},
  {"utf8String", 34, NULL},
  {"pkcs-9-localKeyId", 1073741831, NULL},
  {"pkcs-8-PrivateKeyInfo", 1610612741, NULL},
  {"version", 1073741827, NULL},
  {"privateKeyAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"privateKey", 1073741831, NULL},
  {"attributes", 536895490, "Attributes"},
  {NULL, 4104, "0"},
  {"pkcs-8-EncryptedPrivateKeyInfo", 1610612741, NULL},
  {"encryptionAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"encryptedData", 2, "pkcs-8-EncryptedData"},
  {"pkcs-8-EncryptedData", 1073741831, NULL},
  {"pkcs-5-des-CBC-params", 1612709895, NULL},
  {NULL, 1048586, "8"},
  {"pkcs-5-des-EDE3-CBC-params", 1612709895, NULL},
  {NULL, 1048586, "8"},
  {"pkcs-5-aes128-CBC-params", 1612709895, NULL},
  {NULL, 1048586, "16"},
  {"pkcs-5-aes192-CBC-params", 1612709895, NULL},
  {NULL, 1048586, "16"},
  {"pkcs-5-aes256-CBC-params", 1612709895, NULL},
  {NULL, 1048586, "16"},
  {"Gost28147-89-Parameters", 1610612741, NULL},
  {"iv", 1073741831, NULL},
  {"encryptionParamSet", 12, NULL},
  {"pkcs-5-PBE-params", 1610612741, NULL},
  {"salt", 1073741831, NULL},
  {"iterationCount", 3, NULL},
  {"pkcs-5-PBES2-params", 1610612741, NULL},
  {"keyDerivationFunc", 1073741826, "AlgorithmIdentifier"},
  {"encryptionScheme", 2, "AlgorithmIdentifier"},
  {"pkcs-5-PBKDF2-params", 1610612741, NULL},
  {"salt", 1610612754, NULL},
  {"specified", 1073741831, NULL},
  {"otherSource", 2, "AlgorithmIdentifier"},
  {"iterationCount", 1611137027, NULL},
  {"1", 10, "MAX"},
  {"keyLength", 1611153411, NULL},
  {"1", 10, "MAX"},
  {"prf", 16386, "AlgorithmIdentifier"},
  {"pkcs-12-PFX", 1610612741, NULL},
  {"version", 1610874883, NULL},
  {"v3", 1, "3"},
  {"authSafe", 1073741826, "pkcs-7-ContentInfo"},
  {"macData", 16386, "pkcs-12-MacData"},
  {"pkcs-12-PbeParams", 1610612741, NULL},
  {"salt", 1073741831, NULL},
  {"iterations", 3, NULL},
  {"pkcs-12-MacData", 1610612741, NULL},
  {"mac", 1073741826, "pkcs-7-DigestInfo"},
  {"macSalt", 1073741831, NULL},
  {"iterations", 536903683, NULL},
  {NULL, 9, "1"},
  {"pkcs-12-AuthenticatedSafe", 1610612747, NULL},
  {NULL, 2, "pkcs-7-ContentInfo"},
  {"pkcs-12-SafeContents", 1610612747, NULL},
  {NULL, 2, "pkcs-12-SafeBag"},
  {"pkcs-12-SafeBag", 1610612741, NULL},
  {"bagId", 1073741836, NULL},
  {"bagValue", 1614815245, NULL},
  {NULL, 1073743880, "0"},
  {"badId", 1, NULL},
  {"bagAttributes", 536887311, NULL},
  {NULL, 2, "Attribute"},
  {"pkcs-12-CertBag", 1610612741, NULL},
  {"certId", 1073741836, NULL},
  {"certValue", 541073421, NULL},
  {NULL, 1073743880, "0"},
  {"certId", 1, NULL},
  {"pkcs-12-CRLBag", 1610612741, NULL},
  {"crlId", 1073741836, NULL},
  {"crlValue", 541073421, NULL},
  {NULL, 1073743880, "0"},
  {"crlId", 1, NULL},
  {"pkcs-12-SecretBag", 1610612741, NULL},
  {"secretTypeId", 1073741836, NULL},
  {"secretValue", 541073421, NULL},
  {NULL, 1073743880, "0"},
  {"secretTypeId", 1, NULL},
  {"pkcs-7-Data", 1073741831, NULL},
  {"pkcs-7-EncryptedData", 1610612741, NULL},
  {"version", 1073741827, NULL},
  {"encryptedContentInfo", 1073741826, "pkcs-7-EncryptedContentInfo"},
  {"unprotectedAttrs", 536895490, "pkcs-7-UnprotectedAttributes"},
  {NULL, 4104, "1"},
  {"pkcs-7-EncryptedContentInfo", 1610612741, NULL},
  {"contentType", 1073741836, NULL},
  {"contentEncryptionAlgorithm", 1073741826,
   "pkcs-7-ContentEncryptionAlgorithmIdentifier"},
  {"encryptedContent", 536895495, NULL},
  {NULL, 4104, "0"},
  {"pkcs-7-ContentEncryptionAlgorithmIdentifier", 1073741826,
   "AlgorithmIdentifier"},
  {"pkcs-7-UnprotectedAttributes", 1612709903, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "Attribute"},
  {"ProxyCertInfo", 1610612741, NULL},
  {"pCPathLenConstraint", 1611153411, NULL},
  {"0", 10, "MAX"},
  {"proxyPolicy", 2, "ProxyPolicy"},
  {"ProxyPolicy", 1610612741, NULL},
  {"policyLanguage", 1073741836, NULL},
  {"policy", 16391, NULL},
  {"certificatePolicies", 1612709899, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "PolicyInformation"},
  {"PolicyInformation", 1610612741, NULL},
  {"policyIdentifier", 1073741836, NULL},
  {"policyQualifiers", 538984459, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "PolicyQualifierInfo"},
  {"PolicyQualifierInfo", 1610612741, NULL},
  {"policyQualifierId", 1073741836, NULL},
  {"qualifier", 541065229, NULL},
  {"policyQualifierId", 1, NULL},
  {"CPSuri", 1073741853, NULL},
  {"UserNotice", 1610612741, NULL},
  {"noticeRef", 1073758210, "NoticeReference"},
  {"explicitText", 16386, "DisplayText"},
  {"NoticeReference", 1610612741, NULL},
  {"organization", 1073741826, "DisplayText"},
  {"noticeNumbers", 536870923, NULL},
  {NULL, 3, NULL},
  {"DisplayText", 1610612754, NULL},
  {"ia5String", 1612709917, NULL},
  {"200", 524298, "1"},
  {"visibleString", 1612709923, NULL},
  {"200", 524298, "1"},
  {"bmpString", 1612709921, NULL},
  {"200", 524298, "1"},
  {"utf8String", 538968098, NULL},
  {"200", 524298, "1"},
  {"OCSPRequest", 1610612741, NULL},
  {"tbsRequest", 1073741826, "TBSRequest"},
  {"optionalSignature", 536895490, "Signature"},
  {NULL, 2056, "0"},
  {"TBSRequest", 1610612741, NULL},
  {"version", 1610653699, NULL},
  {NULL, 1073741833, "0"},
  {NULL, 2056, "0"},
  {"requestorName", 1610637314, "GeneralName"},
  {NULL, 2056, "1"},
  {"requestList", 1610612747, NULL},
  {NULL, 2, "Request"},
  {"requestExtensions", 536895490, "Extensions"},
  {NULL, 2056, "2"},
  {"Signature", 1610612741, NULL},
  {"signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"signature", 1073741830, NULL},
  {"certs", 536895499, NULL},
  {NULL, 1073743880, "0"},
  {NULL, 2, "Certificate"},
  {"Request", 1610612741, NULL},
  {"reqCert", 1073741826, "CertID"},
  {"singleRequestExtensions", 536895490, "Extensions"},
  {NULL, 2056, "0"},
  {"CertID", 1610612741, NULL},
  {"hashAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"issuerNameHash", 1073741831, NULL},
  {"issuerKeyHash", 1073741831, NULL},
  {"serialNumber", 2, "CertificateSerialNumber"},
  {"OCSPResponse", 1610612741, NULL},
  {"responseStatus", 1073741826, "OCSPResponseStatus"},
  {"responseBytes", 536895490, "ResponseBytes"},
  {NULL, 2056, "0"},
  {"OCSPResponseStatus", 1610874901, NULL},
  {"successful", 1073741825, "0"},
  {"malformedRequest", 1073741825, "1"},
  {"internalError", 1073741825, "2"},
  {"tryLater", 1073741825, "3"},
  {"sigRequired", 1073741825, "5"},
  {"unauthorized", 1, "6"},
  {"ResponseBytes", 1610612741, NULL},
  {"responseType", 1073741836, NULL},
  {"response", 7, NULL},
  {"BasicOCSPResponse", 1610612741, NULL},
  {"tbsResponseData", 1073741826, "ResponseData"},
  {"signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
  {"signature", 1073741830, NULL},
  {"certs", 536895499, NULL},
  {NULL, 1073743880, "0"},
  {NULL, 2, "Certificate"},
  {"ResponseData", 1610612741, NULL},
  {"version", 1610653699, NULL},
  {NULL, 1073741833, "0"},
  {NULL, 2056, "0"},
  {"responderID", 1073741826, "ResponderID"},
  {"producedAt", 1073741861, NULL},
  {"responses", 1610612747, NULL},
  {NULL, 2, "SingleResponse"},
  {"responseExtensions", 536895490, "Extensions"},
  {NULL, 2056, "1"},
  {"ResponderID", 1610612754, NULL},
  {"byName", 1610620939, NULL},
  {NULL, 1073743880, "1"},
  {NULL, 2, "RelativeDistinguishedName"},
  {"byKey", 536879111, NULL},
  {NULL, 2056, "2"},
  {"SingleResponse", 1610612741, NULL},
  {"certID", 1073741826, "CertID"},
  {"certStatus", 1073741826, "CertStatus"},
  {"thisUpdate", 1073741861, NULL},
  {"nextUpdate", 1610637349, NULL},
  {NULL, 2056, "0"},
  {"singleExtensions", 536895490, "Extensions"},
  {NULL, 2056, "1"},
  {"CertStatus", 1610612754, NULL},
  {"good", 1610620948, NULL},
  {NULL, 4104, "0"},
  {"revoked", 1610620930, "RevokedInfo"},
  {NULL, 4104, "1"},
  {"unknown", 536879106, "UnknownInfo"},
  {NULL, 4104, "2"},
  {"RevokedInfo", 1610612741, NULL},
  {"revocationTime", 1073741861, NULL},
  {"revocationReason", 537157653, NULL},
  {NULL, 1073743880, "0"},
  {"unspecified", 1, "0"},
  {"UnknownInfo", 1073741844, NULL},
  {"NameConstraints", 1610612741, NULL},
  {"permittedSubtrees", 1610637314, "GeneralSubtrees"},
  {NULL, 4104, "0"},
  {"excludedSubtrees", 536895490, "GeneralSubtrees"},
  {NULL, 4104, "1"},
  {"GeneralSubtrees", 1612709899, NULL},
  {"MAX", 1074266122, "1"},
  {NULL, 2, "GeneralSubtree"},
  {"GeneralSubtree", 1610612741, NULL},
  {"base", 1073741826, "GeneralName"},
  {"minimum", 1610653699, NULL},
  {NULL, 1073741833, "0"},
  {NULL, 4104, "0"},
  {"maximum", 536895491, NULL},
  {NULL, 4104, "1"},
  {"TlsFeatures", 536870923, NULL},
  {NULL, 3, NULL},
  {NULL, 0, NULL}
};

int
LLVMFuzzerTestOneInput (const uint8_t * data, size_t size)
{
  static asn1_node _gnutls_pkix1_asn = NULL;
  static int first = 1;
  asn1_node dn;
  int res, start, end;

  if (size > 10000)		// same as max_len = 10000 in .options file
    return 0;

  if (first)
    {
      first = 0;

      // from _gnutls_global_init()
      res = asn1_array2tree (pkix_asn1_tab, &_gnutls_pkix1_asn, NULL);
      assert (res == ASN1_SUCCESS);
    }

  // from cert_get_issuer_dn()
  if ((res =
       asn1_create_element (_gnutls_pkix1_asn, "PKIX1.Certificate",
			    &dn)) != ASN1_SUCCESS)
    {
      goto out;
    }

  // from cert_get_issuer_dn()
  res = asn1_der_decoding (&dn, data, size, NULL);
  if (res != ASN1_SUCCESS)
    {
      goto out;
    }

  // from cert_get_issuer_dn()
  res =
    asn1_der_decoding_startEnd (dn, data, size, "tbsCertificate.issuer",
				&start, &end);
  if (res != ASN1_SUCCESS)
    {
      goto out;
    }

out:
  asn1_delete_structure (&dn);

  return 0;
}
